作業メモ CGEに準拠したAnimator Controllerの生成
レイヤーの生成
CgeLayerForBlinkingOverrideView.cs
アセットコンテナから CgeAacFlBase のインスタンスを取得して CgeAacFlBase.CreateSupportingArbitraryControllerLayer()を呼び出す
引数にUnityEditor.Animations.AnimatorControllerのインスタンスとレイヤー名を渡す
CgeAac.cs
CgeAacFlBase.CreateSupportingArbitraryControllerLayer() 内部でCgeAacFlBase.DoCreateLayer()を呼び出す
CgeAacAnimatorGenerator のインスタンスを生成
CgeAacAnimatorGeneratorのコンストラクタ
空のアニメーションクリップと、ICgeAacDefaultsProvider のインスタンスを渡している
ICgeAacDefaultsProvider のインスタンスは、ICgeAacDefaultsProvider.ConfigureStateMachine()を呼び出すために使われる
ICgeAacDefaultsProvider を実装したCgeAacDefaultsProviderは、デフォルト値を取得するためのクラス (Write Defaultsの値など)
同名のクラスがCgeAssetContainerの内部でも定義されているが、CgeAssetContainer内でしか使用されていない
CgeAacDefaultsProvide.ConfigureStateMachine() では、ステートを配置する座標を設定している
CgeAacAnimatorGenerator.CreateOrRemakeLayerAtSameIndex()を呼び出してステートマシンを取得
ステートマシンは、Animator Controllerやそのレイヤーとは異なるオブジェクトなのか?
CgeAacFLStateMachineはCgeAacAnimatorNodeの派生クラス
UnityEditor.Animations.AnimatorStateMachineをメンバとして持つ
AnimatorStateMachineはUnityEditor.Animations.AnimatorControllerLayerのメンバ
つまりステートマシンはレイヤーの下位概念
AnimatorStateMachineはChildAnimatorStateMachine構造体の配列をメンバとして持つ
ChildAnimatorStateMachineはAnimatorStateMachine型 (stateMachine) とVector3型 (position) で構成されている
CgeAac.UndoDisable() がたびたび呼び出されている
リフレクションを使って対象 (state) のpushUndoメンバにfalseをセットしている
UndoEnable() は逆にpushUndoメンバにtrueをセットする
BindingFlags.Instanceはインスタンスメンバを指定するもの
つまりstaticでないフィールドやメソッド
stateの型 (T) は任意となっている (whereが指定されていない)
UnityCsReferenceのリポジトリを検索したところ、StateMachine.csとAnimatorController.cs に該当のメンバが存在した
StateMachine.cs において、pushUndoメンバはinternalであり、undoHandlerに値をセットするためのプロパティ
undoHandlerはPushUndoInNeeded型のprivateメンバ
pushUndoは他クラスからアクセスできるが、undoHandlerは他クラスからアクセスできない
undoHandler.DoUndo()がStateMachine.cs でたびたび呼び出されている
pushUndoがtrueの場合、 Undo.RegisterCompleteObjectUndo() が呼び出される
pushUndoがfalseの場合は、逆にオブジェクトがDirtyであるとマークされず、Undoに対応しないということになる
Undo/Redo およびシリアライズについて調査
TODO
UndoDisableとUndoEnableがCGE内でどのように使われているか調べる
Issueを検索してもヒットしなかった
UndoDisable
CgeAac.csとCgeAacFlStates.csで呼び出し
UndoEnable
CgeAac.cs で一度だけ呼び出し
Animator Controller生成を高速化するためにUndoを無効化するものだった